-- 参数定义
-- 库存：
--   优惠券 id
local voucherId = ARGV[1]
-- 订单：
--   用户 id
local userId = ARGV[2]
--   订单 id
local orderId = ARGV[3]
-- key：
--   库存 key
local stockKey = 'seckill:stock:' .. voucherId
--   订单 key
local orderKey = 'seckill:order:' .. voucherId

-- 脚本业务
-- 判断库存
if (tonumber(redis.call('get',stockKey)) <= 0) then
    -- 库存不足
    return 1
end
-- 判断用户是否已下单 SISMEMBER
if(redis.call('sismember', orderKey,userId)==1) then
    -- 存在，说明重复下单
    return 2
end
-- 一切就绪, 扣库存 + 增加用户id
redis.call('incrby',stockKey,-1)
redis.call('sadd',orderKey,userId)
-- 发送消息到队列中 XADD stream.orders * k1 v1 k2 v2 ...
redis.call('xadd','stream.orders','*','voucherId',voucherId,'userId',userId,'id',orderId)
return 0